home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / hugetlb.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  4KB  |  143 lines

  1. #ifndef _LINUX_HUGETLB_H
  2. #define _LINUX_HUGETLB_H
  3.  
  4. #ifdef CONFIG_HUGETLB_PAGE
  5.  
  6. #include <linux/mempolicy.h>
  7.  
  8. struct ctl_table;
  9.  
  10. static inline int is_vm_hugetlb_page(struct vm_area_struct *vma)
  11. {
  12.     return vma->vm_flags & VM_HUGETLB;
  13. }
  14.  
  15. int hugetlb_sysctl_handler(struct ctl_table *, int, struct file *, void __user *, size_t *, loff_t *);
  16. int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *);
  17. int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, struct page **, struct vm_area_struct **, unsigned long *, int *, int);
  18. void zap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long);
  19. void unmap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long);
  20. int hugetlb_prefault(struct address_space *, struct vm_area_struct *);
  21. int hugetlb_report_meminfo(char *);
  22. int hugetlb_report_node_meminfo(int, char *);
  23. int is_hugepage_mem_enough(size_t);
  24. unsigned long hugetlb_total_pages(void);
  25. struct page *follow_huge_addr(struct mm_struct *mm, unsigned long address,
  26.                   int write);
  27. struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
  28.                 pmd_t *pmd, int write);
  29. int is_aligned_hugepage_range(unsigned long addr, unsigned long len);
  30. int pmd_huge(pmd_t pmd);
  31. struct page *alloc_huge_page(void);
  32. void free_huge_page(struct page *);
  33.  
  34. extern unsigned long max_huge_pages;
  35. extern const unsigned long hugetlb_zero, hugetlb_infinity;
  36. extern int sysctl_hugetlb_shm_group;
  37.  
  38. #ifndef ARCH_HAS_HUGEPAGE_ONLY_RANGE
  39. #define is_hugepage_only_range(addr, len)    0
  40. #define hugetlb_free_pgtables(tlb, prev, start, end) do { } while (0)
  41. #endif
  42.  
  43. #ifndef ARCH_HAS_PREPARE_HUGEPAGE_RANGE
  44. #define prepare_hugepage_range(addr, len)    \
  45.     is_aligned_hugepage_range(addr, len)
  46. #else
  47. int prepare_hugepage_range(unsigned long addr, unsigned long len);
  48. #endif
  49.  
  50. #else /* !CONFIG_HUGETLB_PAGE */
  51.  
  52. static inline int is_vm_hugetlb_page(struct vm_area_struct *vma)
  53. {
  54.     return 0;
  55. }
  56. static inline unsigned long hugetlb_total_pages(void)
  57. {
  58.     return 0;
  59. }
  60.  
  61. #define follow_hugetlb_page(m,v,p,vs,a,b,i)    ({ BUG(); 0; })
  62. #define follow_huge_addr(mm, addr, write)    ERR_PTR(-EINVAL)
  63. #define copy_hugetlb_page_range(src, dst, vma)    ({ BUG(); 0; })
  64. #define hugetlb_prefault(mapping, vma)        ({ BUG(); 0; })
  65. #define zap_hugepage_range(vma, start, len)    BUG()
  66. #define unmap_hugepage_range(vma, start, end)    BUG()
  67. #define is_hugepage_mem_enough(size)        0
  68. #define hugetlb_report_meminfo(buf)        0
  69. #define hugetlb_report_node_meminfo(n, buf)    0
  70. #define follow_huge_pmd(mm, addr, pmd, write)    NULL
  71. #define is_aligned_hugepage_range(addr, len)    0
  72. #define prepare_hugepage_range(addr, len)    (-EINVAL)
  73. #define pmd_huge(x)    0
  74. #define is_hugepage_only_range(addr, len)    0
  75. #define hugetlb_free_pgtables(tlb, prev, start, end) do { } while (0)
  76. #define alloc_huge_page()            ({ NULL; })
  77. #define free_huge_page(p)            ({ (void)(p); BUG(); })
  78.  
  79. #ifndef HPAGE_MASK
  80. #define HPAGE_MASK    0        /* Keep the compiler happy */
  81. #define HPAGE_SIZE    0
  82. #endif
  83.  
  84. #endif /* !CONFIG_HUGETLB_PAGE */
  85.  
  86. #ifdef CONFIG_HUGETLBFS
  87. struct hugetlbfs_config {
  88.     uid_t   uid;
  89.     gid_t   gid;
  90.     umode_t mode;
  91.     long    nr_blocks;
  92.     long    nr_inodes;
  93. };
  94.  
  95. struct hugetlbfs_sb_info {
  96.     long    max_blocks;   /* blocks allowed */
  97.     long    free_blocks;  /* blocks free */
  98.     long    max_inodes;   /* inodes allowed */
  99.     long    free_inodes;  /* inodes free */
  100.     spinlock_t    stat_lock;
  101. };
  102.  
  103.  
  104. struct hugetlbfs_inode_info {
  105.     struct shared_policy policy;
  106.     struct inode vfs_inode;
  107. };
  108.  
  109. static inline struct hugetlbfs_inode_info *HUGETLBFS_I(struct inode *inode)
  110. {
  111.     return container_of(inode, struct hugetlbfs_inode_info, vfs_inode);
  112. }
  113.  
  114. static inline struct hugetlbfs_sb_info *HUGETLBFS_SB(struct super_block *sb)
  115. {
  116.     return sb->s_fs_info;
  117. }
  118.  
  119. extern struct file_operations hugetlbfs_file_operations;
  120. extern struct vm_operations_struct hugetlb_vm_ops;
  121. struct file *hugetlb_zero_setup(size_t);
  122. int hugetlb_get_quota(struct address_space *mapping);
  123. void hugetlb_put_quota(struct address_space *mapping);
  124.  
  125. static inline int is_file_hugepages(struct file *file)
  126. {
  127.     return file->f_op == &hugetlbfs_file_operations;
  128. }
  129.  
  130. static inline void set_file_hugepages(struct file *file)
  131. {
  132.     file->f_op = &hugetlbfs_file_operations;
  133. }
  134. #else /* !CONFIG_HUGETLBFS */
  135.  
  136. #define is_file_hugepages(file)        0
  137. #define set_file_hugepages(file)    BUG()
  138. #define hugetlb_zero_setup(size)    ERR_PTR(-ENOSYS)
  139.  
  140. #endif /* !CONFIG_HUGETLBFS */
  141.  
  142. #endif /* _LINUX_HUGETLB_H */
  143.